from mcp.server.fastmcp import FastMCP
from datetime import datetime
from zhipu_mcp_client import ZhipuMcpClient


zhipu_client = ZhipuMcpClient()
mcp = FastMCP(host='0.0.0.0', port=9876)


@mcp.tool()
async def current_time():
    """获取当前日期和时间。当用户需要搜索当前、最新或实时等信息时，可首先调用本工具获取当前时间，然后再调用zhipu_web_search工具执行搜索"""
    now_time = datetime.now()
    # now_time += timedelta(hours=8)
    return now_time.strftime('%Y-%m-%dT%H:%M:%S')


@mcp.tool()
async def web_search(
        search_query: str,
        search_engine: str,
        count: int = 10,
        search_recency_filter: str = 'noLimit',
        content_size: str = 'medium') -> str:
    """搜索网络信息，返回结果包括网页标题、网页URL、网页摘要、网站名称、网站图标等
    param search_query: 搜索查询关键词或短语，用于指定需要搜索的内容。支持自然语言查询，可以包含多个关键词。Agent应该根据用户意图构建合适的查询语句，确保搜索结果的准确性和相关性。最佳实践：1) 使用简洁明确的关键词组合；2) 对于复杂查询，可以拆分为多个简单查询；3) 避免使用过于宽泛或模糊的词语。
    param search_engine: 搜索引擎，目前支持：
        - webSearchStd : 智谱基础版搜索引擎；
        - webSearchPro : 智谱高阶版搜索引擎；
        - webSearchSogou : 搜狗搜索；
        - webSearchQuark : 夸克搜索；
        - webSearchJina : jina.ai搜索；
        - webSearchBing： 必应搜索。
    param count: 返回结果的条数。- 可填范围：1-50，最大单次搜索返回50条- 默认为10支持的搜索引擎：Sogou、std、pro Sogou: 可选枚举值，10、20、30、40、50
    param search_recency_filter: 搜索指定时间范围内的网页。默认为 noLimit可填值：- oneDay，一天内- oneWeek，一周内- oneMonth，一个月内- oneYear，一年内- noLimit，不限（默认）支持的搜索引擎：Sogou、quark、std、pro
    param content_size: 控制网页摘要的字数；默认值为medium- medium：平衡模式，适用于大多数查询。 400-600 字- high（高）：最大化上下文以提供更全面的回答，但成本较高，2500 字。
    """
    return zhipu_client.call_mcp_tool(search_query, search_engine, count, search_recency_filter, content_size)


if __name__ == '__main__':
    mcp.run(transport='streamable-http')

